﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="Breakpoint Syntax"/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>Breakpoint Syntax</title>

<meta name="MS-HAID" content="r07_use_operation_ac8251aa-d8c8-42bf-96b4-686b3bd4f80b.xml"/>


<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(1352);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/breakpoint_syntax.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="methods_of_controlling_breakpoints.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="unresolved_breakpoints___bu_breakpoints_.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_techniques.htm">Debugging Techniques</A> &gt; <A href="standard_debugging_techniques.htm">Standard Debugging Techniques</A> &gt; <A href="using_breakpoints.htm">Using Breakpoints</A> &gt; </div>
	<div id="winchm_template_title">Breakpoint Syntax</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>The following syntax elements can be used when creating a <a href="#Bookmark1350">breakpoint</a>, either through the Debugger Command window or through the WinDbg graphical interface.</p>
<h3><a id="addresses_in_breakpoints"></a><a id="ADDRESSES_IN_BREAKPOINTS"></a>Addresses in Breakpoints</h3>
<p>Breakpoints support many kinds of address syntax, including virtual addresses, function offsets, and source line numbers. For example, you can use any of the following commands to set breakpoints:</p>
<pre class="syntax" xml:space="preserve"><code>0:000&gt; bp 0040108c
0:000&gt; bp main+5c
0:000&gt; bp `source.c:31`</code></pre>
<p>For more information about this syntax, see <a href="#Bookmark1917">Numerical Expression Syntax</a>, <a href="#Bookmark1926">Source Line Syntax</a>, and the individual command topics.</p>
<h3><a id="breakpoints_on_methods"></a><a id="BREAKPOINTS_ON_METHODS"></a>Breakpoints on Methods</h3>
<p>If you want to put a breakpoint on the <i>MyMethod</i> method in the <i>MyClass</i> class, you can use two different syntaxes:</p>
<ul>
<li>In MASM expression syntax, you can indicate a method by a double colon or by a double underscore.<pre class="syntax" xml:space="preserve"><code>0:000&gt; bp MyClass::MyMethod 
0:000&gt; bp MyClass__MyMethod </code></pre>
</li>
<li>In C++ expression syntax, you must indicate a method by a double colon.<pre class="syntax" xml:space="preserve"><code>0:000&gt; bp @@( MyClass::MyMethod ) </code></pre>
</li>
</ul>
<p>If you want to use a more complex breakpoint command, you should use MASM expression syntax. For more information about expression syntax, see <a href="#Bookmark1266">Evaluating Expressions</a>. </p>
<h3><a id="breakpoints_using_complicated_text"></a><a id="BREAKPOINTS_USING_COMPLICATED_TEXT"></a>Breakpoints Using Complicated Text</h3>
<p>To set a breakpoint on complicated functions, including functions that contain spaces, as well as a member of a C++ public class, enclose the expression in parentheses. For example, use <b>bp (??MyPublic)</b> or <b>bp (operator new)</b>. </p>
<p>A more versatile technique is to use the @!"chars" syntax. This is a special escape in the MASM evaluator that enables you to provide arbitrary text for symbol resolution. You must start with the three symbols @!" and end with a quotation mark ("). Without this syntax, you cannot use spaces, angle brackets (&lt;, &gt;), or other special characters in symbol names in the MASM evaluator. This syntax is exclusively for names, and not parameters. Templates and overloads are the primary sources of symbols that require this quote notation. You can also set the <b>bu </b>command by using the @!"chars" syntax, as the following code example shows.</p>
<pre class="syntax" xml:space="preserve"><code>0:000&gt; bu @!"ExecutableName!std::pair&lt;unsigned int,std::basic_string&lt;unsigned short,std::char_traits&lt;unsigned short&gt;,std::allocator&lt;unsigned short&gt; &gt; &gt;::operator="</code></pre>
<p>In this example, <i>ExecutableName</i> is the name of an executable file.</p>
<p>This escape syntax is more useful for C++ (for example, overloaded operators) instead of C because there are no spaces (or special characters) in C function names. However, this syntax is also important for a lot of managed code because of the considerable use of overloads in the .NET Framework.</p>
<p>To set a breakpoint on arbitrary text in C++ syntax, use <b>bu @@c++(</b><i>text</i><b>)</b> for C++-compatible symbols.</p>
<h3><a id="breakpoints_in_scripts"></a><a id="BREAKPOINTS_IN_SCRIPTS"></a>Breakpoints in Scripts</h3>
<p>Breakpoint IDs do not have to be referred to explicitly.  Instead, you can use a numerical expression that resolves to an integer that corresponds to a breakpoint ID.  To indicate that the expression should be interpreted as a breakpoint, use the following syntax.</p>
<pre class="syntax" xml:space="preserve"><code>b?[Expression]</code></pre>
<p>In this syntax, the square brackets are required, and <i>Expression</i> stands for any numerical expression that resolves to an integer that corresponds to a breakpoint ID.</p>
<p>This syntax allows debugger scripts to programmatically select a breakpoint.  In the following example, the breakpoint changes depending on the value of a user-defined pseudo-register.</p>
<pre class="syntax" xml:space="preserve"><code>b?[@$t0]</code></pre>
<h3><a id="breakpoint_pseudo_registers"></a><a id="BREAKPOINT_PSEUDO_REGISTERS"></a>Breakpoint Pseudo-Registers</h3>
<p>If you want to refer to a breakpoint address in an expression, you can use a <a href="#Bookmark1925">pseudo-register</a> with the <b>$bp</b><i>Number</i> syntax, where <i>Number</i> is the breakpoint ID. For more information about this syntax, see Pseudo-Register Syntax.</p></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
